<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
	<title>
LuaJava - ferramenta de scripts para Java</title>    <link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>

<body>

<div id="container">

<div id="product">
	<div id="product_logo"><a href="http://www.keplerproject.org"><img alt="LuaJava" src="luajava_128.png"/></a></div>
	<div id="product_name"><big><b>LuaJava</b></big></div>
	<div id="product_description">Ferramenta de scripts para Java</div>
</div> <!-- id="product" -->

<div id="main">
<div id="navigation">
	
<h1>LuaJava</h1>
	<ul>
		<li><a href="index.html">In&iacute;cio</a>
			<ul>
				<li><a href="index.html#overview">Vis&atilde;o geral</a></li>
				<li><a href="index.html#status">Status</a></li>
				<li><a href="index.html#dependencies">Depend&ecirc;ncias</a></li>
				<li><a href="index.html#download">Download</a></li>
				<li><a href="index.html#credits">Cr&eacute;ditos</a></li>
				<li><a href="index.html#contact">Fale conosco</a></li>
			</ul>
		</li>
		<li><strong>Manual</strong>
			<ul>
				<li><a href="manual.html#compile">Compila&ccedil;&atilde;o</a></li>
				<li><a href="manual.html#install">Instala&ccedil;&atilde;o</a></li>
				<li><a href="manual.html#console">Console Java</a></li>
				<li><a href="manual.html#luareference">Refer&ecirc;ncia de Lua</a></li>
				<li><a href="manual.html#javareference">Refer&ecirc;ncia de Java</a></li>
			</ul>
		</li>
		<li><a href="examples.html">Exemplos</a></li>
		<li><a href="history.html">Hist&oacute;rico</a></li>
    <li><a href="http://luaforge.net/projects/luajava/">Projeto</a>
      <ul>
          <li><a href="http://luaforge.net/tracker/?group_id=10">Bug Tracker</a></li>
          <li><a href="http://luaforge.net/scm/?group_id=10">CVS</a></li>
      </ul>
    </li>
		<li><a href="license.html">Licen&ccedil;a</a></li>
	</ul>
</div> <!-- id="navigation" -->

<div id="content">

<p>LuaJava foi testado nas plataformas Windows e Linux usando o Java JDK 1.4. LuaJava &eacute; compat&iacute;vel com o JDK 1.4 ou posterior.</p>

<h2><a name="compile"></a>Compila&ccedil;&atilde;o</h2>

<p>A distribui&ccedil;&atilde;o do c&oacute;digo fonte de LuaJava inclui um nmakefile do Windows e um makefile do Linux. Edite o arquivo <code>config</code> para que aponte para o JDK, os diret&oacute;rios Lua, bem como as bibliotecas e os compiladores de C.</p>

<h3>Windows</h3>

<p>LuaJava pode ser compilado para Windows usando <em>nmake</em> em <em>MSVC++</em>. Para fazer isso, execute o comando <code>VCVARS32.BAT</code> antes de executar nmake:</p>

<pre class="example">
c:\luajava-1.1&gt;&quot;drive:\complete_path_to\VCVARS32.bat&quot;
c:\luajava-1.1&gt;nmake -f nmakefile
</pre>

<h3>Linux</h3>

<p>Para compilar LuaJava para Linux e OSX, execute este procedimento:</p>

<pre class="example">
make
</pre>


<h2><a name="install"></a>Instala&ccedil;&atilde;o</h2>

<p>A compila&ccedil;&atilde;o do LuaJava gera dois arquivos: <code>luajava-1.1.jar</code> e <code>luajava-1.1.dll</code> (ou <code>libluajava-1.1.so</code> no Unix, ou <code>libluajava-1.1.jnilib</code> no MacOSX).
</p>

<dl>
<dt><strong>luajava-1.1.jar</strong></dt>
<dd>Este arquivo deve ser copiado em um caminho no CLASSPATH da aplica&ccedil;&atilde;o java.</dd>

<dt><strong>luajava-1.1.dll (ou libluajava-1.1.so ou libluajava-1.1.jnilib)</strong></dt>
<dd>Este arquivo deve ser copiado em um diret&oacute;rio de sistema, o que depende do sistema operacional. Os usu&aacute;rios de Windows podem us&aacute;-lo no diret&oacute;rio <code>bin</code> da JRE ou na pasta do sistema Windows. Os usu&aacute;rios Unix podem coloc&aacute;-lo no diret&oacute;rio <code>bin</code> da JRE ou em um diret&oacute;rio apontado pela vari&aacute;vel de ambiente LD_LIBRARY_PATH.</dd>
</dl>


<h2><a name="console"></a>Execu&ccedil;&atilde;o do Console LuaJava</h2>

<p>O LuaJava &eacute; distribu&iacute;do com um console simples. Para execut&aacute;-lo, digite:</p>

<pre class="example">
c:\luajava-1.1&gt;java -cp &quot;luajava-1.1.jar&quot;
       org.keplerproject.luajava.Console
</pre>


<h2><a name="luareference"></a>Refer&ecirc;ncia de Lua</h2>

<p>
Um dos objetivos do LuaJava &eacute; permitir que o programador manipule objetos Java da mesma maneira em que os objetos nativos de Lua s&atilde;o manipulados. Lua, como a maioria das linguagens interpretadas, tem tipos din&acirc;micos. As vari&aacute;veis n&atilde;o t&ecirc;m tipos, cada valor carrega em si seu pr&oacute;prio tipo. Lua n&atilde;o tem declara&ccedil;&otilde;es, mas as vari&aacute;veis podem conter qualquer valor da linguagem.

LuaJava cria uma biblioteca em Lua chamada <code>luajava</code>. Essa biblioteca oferece cinco fun&ccedil;&otilde;es:
</p>

<dl>

    <dt><strong>newInstance(className, ...)</strong></dt>
    <dd><p>Esta fun&ccedil;&atilde;o cria um novo objeto Java e retorna um objeto Lua que &eacute; uma refer&ecirc;ncia ao objeto Java. Voc&ecirc; pode acessar esse objeto com a sintaxe normal usada para acessar m&eacute;todos em objetos Lua.</p>
    <p>O primeiro par&acirc;metro &eacute; o nome da classe a ser instanciada. Os outros par&acirc;metros s&atilde;o passados para o construtor da classe Java.</p>
    <p>Exemplo:</p>

<pre class="example">
obj = luajava.newInstance(&quot;java.lang.Object&quot;)
-- obj passa a ser uma refer&ecirc;ncia ao novo objeto
-- criado e qualquer um de seus m&eacute;todos pode ser acessado.

-- cria um gerador de token de string para a string &quot;a,b,c,d&quot;
-- usando &quot;,&quot; como o separador de token.
strTk = luajava.newInstance(&quot;java.util.StringTokenizer&quot;, 
    &quot;a,b,c,d&quot;, &quot;,&quot;)
while strTk:hasMoreTokens() do
    print(strTk:nextToken())
end

</pre>

<p>O c&oacute;digo anterior deve imprimir o seguinte na tela:</p>


<pre class="example">
a
b
c
d
</pre>
        </dd>

    <dt><strong>bindClass(className)</strong></dt>
    <dd><p>Esta fun&ccedil;&atilde;o recupera uma classe Java que corresponde a <code>className</code>. O objeto retornado pode ser usado para acessar campos est&aacute;ticos e m&eacute;todos da classe correspondente.</p>
    <p>Exemplo:</p>
<pre class="example">
sys = luajava.bindClass(&quot;java.lang.System&quot;)
print ( sys:currentTimeMillis() )

-- imprime a hora retornada pela fun&ccedil;&atilde;o.
</pre>
    </dd>

    <dt><strong>new(javaClass)</strong></dt>
    <dd><p>Esta fun&ccedil;&atilde;o recebe uma java.lang.Class e retorna uma nova inst&acirc;ncia dessa classe.</p>
    <p><code>new</code> funciona da mesma maneira que <code>newInstance</code>, mas o primeiro argumento &eacute; uma inst&acirc;ncia da classe.</p>
    <p>Exemplo:</p>

<pre class="example">
str = luajava.bindClass(&quot;java.lang.String&quot;)
strInstance = luajava.new(str)
</pre>

    </dd>

    <dt><strong>createProxy(interfaceNames, luaObject)</strong></dt>
    <dd><p>Em vez de criar um objeto Java para ser manipulado por Lua, tamb&eacute;m &eacute; poss&iacute;vel criar um objeto Lua para ser manipulado por Java. Podemos fazer isso em LuaJava criando um <em>proxy</em> para esse objeto. Isso &eacute; realizado pela fun&ccedil;&atilde;o createProxy.</p>
    <p>A fun&ccedil;&atilde;o <code>createProxy</code> retorna uma refer&ecirc;ncia a um objeto Java que pode ser usada como uma implementa&ccedil;&atilde;o da interface dada.</p>
    <p><code>createProxy</code> recebe uma string que cont&eacute;m os nomes das interfaces a serem implementadas, separadas por uma v&iacute;rgula (,) e um objeto Lua que &eacute; a implementa&ccedil;&atilde;o da interface.</p>
    <p>Exemplo:</p>

<pre class="example">
button = luajava.newInstance(&quot;java.awt.Button&quot;, &quot;execute&quot;)
button_cb = {}
function button_cb.actionPerformed(ev)
 . . .
end

buttonProxy = luajava.createProxy(&quot;java.awt.ActionListener&quot;, 
    button_cb)

button:addActionListener(buttonProxy)
</pre>
    
    <p>Podemos usar scripts Lua somente para escrever implementa&ccedil;&otilde;es de interfaces Java. N&atilde;o &eacute; poss&iacute;vel extender classes.</p>
    </dd>
    
    <dt><strong>loadLib(className, methodName)</strong></dt>
    <dd><p><code>loadLib</code> &eacute; uma fun&ccedil;&atilde;o cujo uso &eacute; semelhante ao da fun&ccedil;&atilde;o <code>loadlib</code> de Lua. O objetivo dessa fun&ccedil;&atilde;o &eacute; permitir que os usu&aacute;rios escrevam bibliotecas em Java e, depois, as carreguem em Lua.</p>
    <p>O que <code>loadLib</code> faz &eacute; chamar uma fun&ccedil;&atilde;o est&aacute;tica em uma dada classe e executar um determinado m&eacute;todo, que deve receber LuaState como par&acirc;metro. Se essa fun&ccedil;&atilde;o retornar um n&uacute;mero inteiro, LuaJava considera esse valor como o n&uacute;mero de par&acirc;metros retornados pela fun&ccedil;&atilde;o; caso contr&aacute;rio, nada ser&aacute; retornado.</p>
    <p>O exemplo em Lua a seguir pode acessar a global <code>eg</code> criada pela classe Java <code>test.LoadLibExample</code>:</p>

<pre class="example">
luajava.loadLib(&quot;test.LoadLibExample&quot;, &quot;open&quot;)
eg.example(3)
</pre>

    <p>E este exemplo de Java implementa o m&eacute;todo <code>example</code>:</p>

<pre class="example">
public static int open(LuaState L) throws LuaException
{
  L.newTable();
  L.pushValue(-1);
  L.setGlobal(&quot;eg&quot;);

  L.pushString(&quot;example&quot;);

  L.pushJavaFunction(new JavaFunction(L) {
    /**
     * Exemplo para loadLib.
     * Imprime a hora e o primeiro par&acirc;metro, se houver.
     */
    public int execute() throws LuaException
    {
      System.out.println(new Date().toString());
    
      if (L.getTop() &gt; 1)
      {
        System.out.println(getParam(2));
      }

      return 0;
    }
  });

  L.setTable(-3);

  return 1;
}
</pre>
    </dd>

</dl>

<h2><a name="javareference"></a>Refer&ecirc;ncia Java</h2>

<p>O <a href="API/index.html">Manual de refer&ecirc;ncia Java</a> do LuaJava &eacute; gerado por JavaDoc para facilitar a navega&ccedil;&atilde;o.</p>

</div> <!-- id="content" -->

</div> <!-- id="main" -->


<div id="about">
	<p><a href="http://validator.w3.org/check?uri=referer">
    <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
      <p><small>$Id: manual.html,v 1.6 2007-01-23 22:37:28 thiago Exp $</small></p>
</div> <!-- id="about" -->

</div> <!-- id="container" -->

</body>
</html> 
